package com.skyline.jfs.cluster.dao.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import com.skyline.jfs.cluster.dao.JFSNodeDao;
import com.skyline.jfs.cluster.mapper.JFSNodeMapper;
import com.skyline.jfs.cluster.model.JFSNode;
import com.skyline.jfs.cluster.model.JFSNodeConfigProper;
import com.skyline.jfs.common.config.Config;

@Repository("jfsNodeDao")
public class JFSNodeDaoImpl implements JFSNodeDao {
	@Autowired
	private JdbcTemplate jdbcTemplate;

	public JFSNode queryJFSNodeByID(Integer id) {
		String sql = Config.getSql("JFSNode.queryJFSNodeByID");
		try {
			return jdbcTemplate.queryForObject(sql, JFSNodeMapper.getMapper(),
					id);
		} catch (Exception e) {
			return null;
		}
	}

	public List<JFSNode> queryAllJFSNode() {
		String sql = Config.getSql("JFSNode.queryAllJFSNode");
		return jdbcTemplate.query(sql, JFSNodeMapper.getMapper());
	}

	public void insertJFSNode() {
		/**
		 * insert into
		 * JFSNode(id,name,ip,description,administrator,totalSpace,usableSpace
		 * ,storageDirctory
		 * ,createdTime,updateTime,heartbeat,loadbalancingFactor,
		 * exist,heartRate)
		 * values(?,?,?,?,?,?,?,?,current_timestamp,current_timestamp
		 * ,current_timestamp,?,?,?)
		 */
		String sql = Config.getSql("JFSNode.insertJFSNode");
		jdbcTemplate.update(sql, JFSNodeConfigProper.getId(),
				JFSNodeConfigProper.getHostname(),
				JFSNodeConfigProper.getIpAddress(),
				JFSNodeConfigProper.getDescription(),
				JFSNodeConfigProper.getAdminJobNum(),
				JFSNodeConfigProper.getTotalSpace(),
				JFSNodeConfigProper.getUsableSpace(),
				JFSNodeConfigProper.getStorageDirectory(),
				JFSNodeConfigProper.getLoadbalacingFactor(), 0);
	}

	public void updateLocalJFSNode() {
		String sql = Config.getSql("JFSNode.updateJFSNode");
		jdbcTemplate.update(sql, JFSNodeConfigProper.getHostname(),
				JFSNodeConfigProper.getIpAddress(),
				JFSNodeConfigProper.getDescription(),
				JFSNodeConfigProper.getAdminJobNum(),
				JFSNodeConfigProper.getTotalSpace(),
				JFSNodeConfigProper.getUsableSpace(),
				JFSNodeConfigProper.getStorageDirectory(),
				JFSNodeConfigProper.getLoadbalacingFactor(),
				JFSNodeConfigProper.getId());
	}

	public void updateHeartBeat() {
		String sql = Config.getSql("JFSNode.updateHeartBeat");
		jdbcTemplate.update(sql, JFSNodeConfigProper.getTotalSpace(),
				JFSNodeConfigProper.getUsableSpace(),
				JFSNodeConfigProper.getId());
	}
}
